﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace CoreInmobiliario.Frontend
{
    public partial class Propiedades : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (Session[HelperClasses.Parameters.USERID] != null)
                {
                    LoadCombos();
                    Buscar();
                }
                else
                    Response.Redirect("Error.aspx");
            }
        }

        public void LoadCombos()
        {
            cmbTipo.DataSource = Business.TipoPropiedad.GetInstance().GetList();
            cmbTipo.DataBind();
            cmbTipo.Items.Insert(0, new ListItem("Indistinto", "0"));

            cmbProvincia.DataSource = Business.Provincia.GetInstance().GetList();
            cmbProvincia.DataBind();
            cmbProvincia.Items.Insert(0, new ListItem("Indistinto", "0"));
        }

        protected void cmbProvincia_SelectedIndexChanged(object sender, EventArgs e)
        {
            cmbLocalidad.DataSource = Business.Localidad.GetInstance().GetListLocalidadByProvinciaId(Int32.Parse(cmbProvincia.SelectedValue));
            cmbLocalidad.DataBind();
            cmbLocalidad.Items.Insert(0, new ListItem("Indistinto", "0"));
        }

        protected void btnBuscar_Click(object sender, EventArgs e)
        {
            Buscar();
        }

        public void Buscar()
        {
            int? tipoPropiedadId = null;
            if (cmbTipo.SelectedValue != "0")
                tipoPropiedadId = Int32.Parse(cmbTipo.SelectedValue);

            int? provinciaId = null;
            if (cmbProvincia.SelectedValue != "0")
                provinciaId = Int32.Parse(cmbProvincia.SelectedValue);

            int? localidadId = null;
            if (cmbLocalidad.SelectedValue != "0" && cmbLocalidad.SelectedValue != "")
                localidadId = Int32.Parse(cmbLocalidad.SelectedValue);

            int? dormitorios = null;
            if (txtDormitorios.Text != "")
                dormitorios = Int32.Parse(txtDormitorios.Text);

            string calle = txtCalle.Text;

            List<Data.spPropiedades_selResult> list = Business.Propiedad.GetInstance().GetPropiedades(calle, tipoPropiedadId, provinciaId, localidadId, dormitorios);

            if (rbtnDestacada.Checked)
                list = list.Where(p => p.Destacada.Equals("Si")).ToList();
            if (rbtnNoDestacada.Checked)
                list = list.Where(p => p.Destacada.Equals("No")).ToList();
            if (rbtnPublicada.Checked)
                list = list.Where(p => p.Publicada.Equals("Si")).ToList();
            if (rbtnNoPublicada.Checked)
                list = list.Where(p => p.Publicada.Equals("No")).ToList();

            gvPropiedades.DataSource = list;
            gvPropiedades.DataBind();
        }

        protected void gvPropiedades_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvPropiedades.PageIndex = e.NewPageIndex;
            Buscar();
        }

        protected void btnNewPropiedad_Click(object sender, ImageClickEventArgs e)
        {
            Response.Redirect("Propiedad.aspx");
        }

        protected void btnPublicar_Click(object sender, EventArgs e)
        {
            GridViewRow row = ((LinkButton)sender).Parent.Parent.Parent as GridViewRow;
            string propiedadId = gvPropiedades.DataKeys[row.RowIndex].Values[0].ToString();
            Data.Publicacion publicacion = Business.Publicacion.GetInstance().GetByPropiedadId(Int32.Parse(propiedadId));

            if (publicacion == null)
            {
                popupPublicacion.SetTitle("Nueva Publicación");
                popupPublicacion.SetPropiedad(row.Cells[0].Text);
                popupPublicacion.SetPropiedadId(propiedadId);
                mpePublicacion.Show();
            }
        }

        protected void btnVerPublicacion_Click(object sender, EventArgs e)
        {
            GridViewRow row = ((LinkButton)sender).Parent.Parent.Parent as GridViewRow;
            string propiedadId = gvPropiedades.DataKeys[row.RowIndex].Values[0].ToString();
            Data.Publicacion publicacion = Business.Publicacion.GetInstance().GetByPropiedadId(Int32.Parse(propiedadId));

            Response.Redirect("Publicacion.aspx?id=" + publicacion.PublicacionId.ToString());
        }

        protected void btnEditarPublicacion_Click(object sender, EventArgs e)
        {
            GridViewRow row = ((LinkButton)sender).Parent.Parent.Parent as GridViewRow;
            string propiedadId = gvPropiedades.DataKeys[row.RowIndex].Values[0].ToString();
            Data.Publicacion publicacion = Business.Publicacion.GetInstance().GetByPropiedadId(Int32.Parse(propiedadId));

            if (publicacion != null)
            {
                popupPublicacion.SetTitle("Editar Publicación");
                popupPublicacion.SetPropiedad(row.Cells[0].Text);
                popupPublicacion.SetPropiedadId(propiedadId);
                popupPublicacion.SetDestacada(publicacion.Destacada.Value);
                popupPublicacion.SetExpensas(publicacion.Expensas == null ? "" : publicacion.Expensas.Value.ToString());
                popupPublicacion.SetMonedaAlquiler(publicacion.Moneda == null ? "" : publicacion.Moneda.MonedaId.ToString());
                popupPublicacion.SetMonedaVenta(publicacion.Moneda1 == null ? "" : publicacion.Moneda1.MonedaId.ToString());
                popupPublicacion.SetOperacion(publicacion.Operacion.OperacionId.ToString());
                popupPublicacion.SetPrecioAlquiler(publicacion.PrecioAlquiler == null ? "" : publicacion.PrecioAlquiler.Value.ToString());
                popupPublicacion.SetPrecioVenta(publicacion.PrecioVenta == null ? "" : publicacion.PrecioVenta.Value.ToString());
                popupPublicacion.SetRequisitos(publicacion.Requisitos);

                ScriptManager script = ScriptManager.GetCurrent(Page);
                ScriptManager.RegisterClientScriptBlock(this, GetType(), "viewPanels", "ViewPanelOperation()", true);

                mpePublicacion.Show();
            }
        }

        protected void btnAceptar_Click(object sender, EventArgs e)
        {
            int propiedadId = Int32.Parse(popupPublicacion.GetPropiedadId());
            Data.Publicacion publicacion = Business.Publicacion.GetInstance().GetByPropiedadId(propiedadId);
            popupMensaje.SetTitulo("Publicación");

            if (publicacion == null) //Nueva Publicación
            {
                publicacion = new Data.Publicacion();
                publicacion.Destacada = popupPublicacion.GetDestacada();
                publicacion.PropiedadId = propiedadId;
                publicacion.Requisitos = popupPublicacion.GetRequisitos();
                publicacion.UsuarioId = Int32.Parse(Session[HelperClasses.Parameters.USERID].ToString());
                publicacion.Fecha = DateTime.Now;
                publicacion.OperacionId = Int32.Parse(popupPublicacion.GetOperacion());

                if (publicacion.OperacionId == 1)
                {
                    publicacion.MonedaVentaId = Int32.Parse(popupPublicacion.GetMonedaVenta());
                    if (popupPublicacion.GetPrecioVenta() != "")
                    {
                        if (popupPublicacion.GetPrecioVenta().Length > 8)
                            publicacion.PrecioVenta = Int32.Parse(popupPublicacion.GetPrecioVenta().Substring(0, 8));
                        else
                            publicacion.PrecioVenta = Int32.Parse(popupPublicacion.GetPrecioVenta());
                    }
                    else
                    {
                        publicacion.PrecioVenta = 0;
                    }
                }
                else if (publicacion.OperacionId == 2)
                {
                    publicacion.MonedaAlquilerId = Int32.Parse(popupPublicacion.GetMonedaAlquiler());
                    if (popupPublicacion.GetPrecioAlquiler() != "")
                    {
                        if (popupPublicacion.GetPrecioAlquiler().Length > 8)
                            publicacion.PrecioAlquiler = Int32.Parse(popupPublicacion.GetPrecioAlquiler().Substring(0,8));
                        else
                            publicacion.PrecioAlquiler = Int32.Parse(popupPublicacion.GetPrecioAlquiler());
                    }
                    else
                    {
                        publicacion.PrecioAlquiler = 0;
                    }

                    if (popupPublicacion.GetExpensas() != "")
                    {
                        if (popupPublicacion.GetExpensas().Length > 8)
                            publicacion.Expensas = Int32.Parse(popupPublicacion.GetExpensas().Substring(0,8));
                        else
                            publicacion.Expensas = Int32.Parse(popupPublicacion.GetExpensas());
                    }
                    else
                    {
                        publicacion.Expensas = 0;
                    }
                }
                else
                {
                    publicacion.MonedaVentaId = Int32.Parse(popupPublicacion.GetMonedaVenta());
                    if (popupPublicacion.GetPrecioVenta() != "")
                    {
                        if (popupPublicacion.GetPrecioVenta().Length > 8)
                            publicacion.PrecioVenta = Int32.Parse(popupPublicacion.GetPrecioVenta().Substring(0, 8));
                        else
                            publicacion.PrecioVenta = Int32.Parse(popupPublicacion.GetPrecioVenta());
                    }
                    else
                    {
                        publicacion.PrecioVenta = 0;
                    }

                    publicacion.MonedaAlquilerId = Int32.Parse(popupPublicacion.GetMonedaAlquiler());

                    if (popupPublicacion.GetPrecioAlquiler() != "")
                    {
                        if (popupPublicacion.GetPrecioAlquiler().Length > 8)
                            publicacion.PrecioAlquiler = Int32.Parse(popupPublicacion.GetPrecioAlquiler().Substring(0, 8));
                        else
                            publicacion.PrecioAlquiler = Int32.Parse(popupPublicacion.GetPrecioAlquiler());
                    }
                    else
                    {
                        publicacion.PrecioAlquiler = 0;
                    }

                    if (popupPublicacion.GetExpensas() != "")
                    {
                        if (popupPublicacion.GetExpensas().Length > 8)
                            publicacion.Expensas = Int32.Parse(popupPublicacion.GetExpensas().Substring(0, 8));
                        else
                            publicacion.Expensas = Int32.Parse(popupPublicacion.GetExpensas());
                    }
                    else
                    {
                        publicacion.Expensas = 0;
                    }
                }

                if (Business.Publicacion.GetInstance().InsertPublicacion(publicacion))
                {
                    popupMensaje.SetIcon(HelperClasses.Parameters.OK_ICON);
                    popupMensaje.SetMessage("La propiedad <b>" + popupPublicacion.GetPropiedad() + "</b> fue publicada con exito.");
                }
                else
                {
                    popupMensaje.SetIcon(HelperClasses.Parameters.ERROR_ICON);
                    popupMensaje.SetMessage("La propiedad <b>" + popupPublicacion.GetPropiedad() + "</b> no pudo publicarce. Por favor, vuelva a intentarlo.");
                }
            }
            else
            {
                //Edición de la publicación
                publicacion.Destacada = popupPublicacion.GetDestacada();
                publicacion.PropiedadId = propiedadId;
                publicacion.Requisitos = popupPublicacion.GetRequisitos();
                publicacion.UsuarioId = Int32.Parse(Session[HelperClasses.Parameters.USERID].ToString());
                publicacion.Fecha = DateTime.Now;
                publicacion.OperacionId = Int32.Parse(popupPublicacion.GetOperacion());

                if (publicacion.OperacionId == 1)
                {
                    publicacion.MonedaVentaId = Int32.Parse(popupPublicacion.GetMonedaVenta());
                    if (popupPublicacion.GetPrecioVenta() != "")
                        publicacion.PrecioVenta = Int32.Parse(popupPublicacion.GetPrecioVenta());
                    else
                    {
                        publicacion.PrecioVenta = 0;
                    }
                }
                else if (publicacion.OperacionId == 2)
                {
                    publicacion.MonedaAlquilerId = Int32.Parse(popupPublicacion.GetMonedaAlquiler());
                    if (popupPublicacion.GetPrecioAlquiler() != "")
                        publicacion.PrecioAlquiler = Int32.Parse(popupPublicacion.GetPrecioAlquiler());
                    else
                    {
                        publicacion.PrecioAlquiler = 0;
                    }
                    if (popupPublicacion.GetExpensas() != "")
                        publicacion.Expensas = Int32.Parse(popupPublicacion.GetExpensas());
                    else
                    {
                        publicacion.Expensas = 0;
                    }
                }
                else
                {
                    publicacion.MonedaVentaId = Int32.Parse(popupPublicacion.GetMonedaVenta());
                    if (popupPublicacion.GetPrecioVenta() != "")
                        publicacion.PrecioVenta = Int32.Parse(popupPublicacion.GetPrecioVenta());
                    else
                    {
                        publicacion.PrecioVenta = 0;
                    }

                    publicacion.MonedaAlquilerId = Int32.Parse(popupPublicacion.GetMonedaAlquiler());
                    if (popupPublicacion.GetPrecioAlquiler() != "")
                        publicacion.PrecioAlquiler = Int32.Parse(popupPublicacion.GetPrecioAlquiler());
                    else
                    {
                        publicacion.PrecioAlquiler = 0;
                    }

                    if (popupPublicacion.GetExpensas() != "")
                        publicacion.Expensas = Int32.Parse(popupPublicacion.GetExpensas());
                    else
                    {
                        publicacion.Expensas = 0;
                    }
                }

                Business.Publicacion.GetInstance().UpdatePublicacion(publicacion);

                popupMensaje.SetIcon(HelperClasses.Parameters.INFO_ICON);
                popupMensaje.SetMessage("La publicación de la propiedad de <b>" + publicacion.Propiedad.Calle + " Nº" + publicacion.Propiedad.Numero + "</b> fue actualizada.");    
            }

            popupPublicacion.SetDestacada(false);
            popupPublicacion.SetExpensas("");
            popupPublicacion.SetMonedaAlquiler("1");
            popupPublicacion.SetMonedaVenta("1");
            popupPublicacion.SetOperacion("0");
            popupPublicacion.SetPrecioAlquiler("");
            popupPublicacion.SetPrecioVenta("");
            popupPublicacion.SetRequisitos("");

            Buscar();

            mpePublicacion.Hide();
            mpeMensaje.Show();
        }

        protected void btnEliminarPublicacion_Click(object sender, EventArgs e)
        {
            GridViewRow row = ((LinkButton)sender).Parent.Parent.Parent as GridViewRow;
            string propiedadId = gvPropiedades.DataKeys[row.RowIndex].Values[0].ToString();
            hiddenPublicacionIdEliminar.Value = propiedadId;
            popupConfirmarAccion.SetTitulo("Eliminar Publicación");
            popupConfirmarAccion.SetMessage("¿Está seguro que desea dar de baja la publicación de la propiedad de <b>" + row.Cells[0].Text + "</b>?");
            mpeConfirmarAccion.Show();
        }

        protected void btnEliminarPropiedad_Click(object sender, EventArgs e)
        {
            GridViewRow row = ((LinkButton)sender).Parent.Parent.Parent as GridViewRow;
            string propiedadId = gvPropiedades.DataKeys[row.RowIndex].Values[0].ToString();
            hiddenPropiedadIdEliminar.Value = propiedadId;
            popupConfirmarAccion.SetTitulo("Eliminar Propiedad");
            popupConfirmarAccion.SetMessage("¿Está seguro que desea dar de baja la propiedad de <b>" + row.Cells[0].Text + "</b>?");
            mpeConfirmarAccion.Show();
        }

        protected void btnConfirmarEliminacion_Click(object sender, EventArgs e)
        {
            //hiddenPublicacionId guardar el PropiedadId a eliminar
            if (hiddenPublicacionIdEliminar.Value != "")
            {
                if (Business.Publicacion.GetInstance().DeletePublicacionByPropiedadId(Int32.Parse(hiddenPublicacionIdEliminar.Value)))
                {
                    hiddenPublicacionIdEliminar.Value = "";
                    popupMensaje.SetTitulo("Eliminar Publicación");
                    popupMensaje.SetIcon(HelperClasses.Parameters.OK_ICON);
                    popupMensaje.SetMessage("La publicación fue dada de baja correctamente.");
                }
            }

            //hiddenPropiedadId guardar el PropiedadId a eliminar
            if (hiddenPropiedadIdEliminar.Value != "")
            {
                Business.Publicacion.GetInstance().DeletePublicacionByPropiedadId(Int32.Parse(hiddenPropiedadIdEliminar.Value));
                if (Business.Propiedad.GetInstance().DeletePropiedad(Int32.Parse(hiddenPropiedadIdEliminar.Value)))
                {
                    string pathPropiedad = HelperClasses.Utils.GetConfig(HelperClasses.Parameters.PROPIEDADES_PATH) + hiddenPropiedadIdEliminar.Value;
                    System.IO.Directory.Delete(MapPathSecure(pathPropiedad), true);
                    
                    hiddenPropiedadIdEliminar.Value = "";
                    popupMensaje.SetTitulo("Eliminar Propiedad");
                    popupMensaje.SetIcon(HelperClasses.Parameters.OK_ICON);
                    popupMensaje.SetMessage("La propiedad fue dada de baja correctamente.");
                }
            }

            Buscar();

            mpeConfirmarAccion.Hide();
            mpeMensaje.Show();
        }

        protected void btnEditarPropiedad_Click(object sender, EventArgs e)
        {
            GridViewRow row = ((LinkButton)sender).Parent.Parent.Parent as GridViewRow;
            string propiedadId = gvPropiedades.DataKeys[row.RowIndex].Values[0].ToString();

            Response.Redirect("Propiedad.aspx?id=" + propiedadId.ToString());
        }

        protected void btnNewPropiedad_Click1(object sender, ImageClickEventArgs e)
        {
            Response.Redirect("Propiedad.aspx");
        }


    }
}